package com.itheima.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * 切面类对方法增强
 */
//@Component  // 注入容器中
@Aspect // 标注是一个切面类
@Slf4j
public class CountProcessTimeAspect {
    /**
     * 通知方法
     * proceedingJointPoint 对象中封装了方法的相关信息
     */
    @Around("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
    public Object countProcessTimeAspect(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        log.info("执行方法增强");
        long begin = System.currentTimeMillis();
        // 执行方法 ----> 原先的方法
        Object proceed = proceedingJoinPoint.proceed();
        long end = System.currentTimeMillis();

        log.info("方法执行耗时:{}ms", end - begin);

        // 返回原先的参数
        return proceed;
    }
}
